/******************************************************************************
 *
 * @file       logindialog.h
 * @brief      登录窗口
 *
 * @author     ario
 * @date       2024/05/13
 * @history
 *****************************************************************************/

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>

#include "global.h"

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = nullptr);
    ~LoginDialog();

private:
    void showTip(QString str, bool b_ok);       // 显示错误提示
    void initHttpHandlers();                    // 初始化Http请求的回调函数

signals:
    void sigSwitchRegister();  // 切换到注册页面信号
    void sigSwitchReset();     // 切换到重置密码页面信号
    void sig_connect_tcp(ServerInfo);

private slots:
    void slot_login_mod_finish(ReqId req_id, QString res, ErrorCodes err);        // 接收到登录模块http回复的槽函数
    void slot_tcp_con_finish(bool);
    void slot_login_failed(int err);
    void slot_switch_chatdlg();

    void on_login_btn_clicked();
    bool checkUserValid();
    bool checkPassValid();

private:
    Ui::LoginDialog *ui;
    QMap<ReqId, std::function<void(const QJsonObject &)>> _handlers;    // 保存Http请求与回调函数的map
    int _uid;
    QString _token;
};

#endif // LOGINDIALOG_H
